小紅帽想跟奶奶說話,然後把蘋果送給奶奶。2D遊戲經常利用對話推進劇情,進行玩家互動,是角色扮演遊戲的精隨。這幾天要來練習製作簡單的對話系統,說話頭像+名字+內容,並且可以按下一步閱讀下一段落文字。
利用MVC(Model–view–controller)模式設計,將管理數據、圖像顯示與控制流程分開,使後續對程式的修改簡化,也易於擴充對話內容。
Model管理資源,角色、對話內容、圖片等等元件。
View負責顯示,接收處理過的數據,傳送至UI顯示。
Controller功能邏輯,負責處理數據,像是處理文本、文字斷句劃分。
用這樣的分工架構來完成對話系統,好處是分工明確,維護容易,較不混亂。
1.角色資訊:角色.name、表情、頭像陣列.img[]、頭像位置sprite.pos(頭像分左右邊)
2.對話文本:使用時機(條件)、內容.txt,文檔格式注意要UTF-8。
//舉例
對話一(條件:第一次見到奶奶).txt
小紅帽:奶奶好。
奶奶:好啊好啊。
小紅帽:奶奶我前陣子去了日本,買了很高級的蘋果。
奶奶:乖孫乖孫。
對話二(條件:小紅帽身上蘋果不足).txt
小紅帽:阿奶奶,我忘記帶蘋果了。
奶奶:......好吧,奶奶不餓。
玩家接近奶奶,按下對話建啟動對話,用canvas(GUI)展示對話內容。
1.接收對話數據,得知對話者與對話內容
2.抓取對話者相關資訊(頭像、表情)
3.用canvas顯示
4.接收「下一步」指令觸發事件
1.偵測事件,觸發事件後,用條件決定要讀取哪一段文本
2.讀取.txt檔,獲得字串或字元陣列
3.分析文件,處理字串或字元陣列,透過關鍵字或特殊符號進行分段,得到對話者與對話內容
4.傳送處理後的文件資訊(已分段的對話和名字)到GUI
擴充功能,如果有空再來思考~
目前unity已經發展得很成熟,github或社群之中已經有很多寫好的資源可以使用,現成的對話系統很多,現成對於製作遊戲來說很方便,推薦去尋找好用的對話系統,節省時間也是控制開發成本的一環唷!